#ifndef STATE_H
#define STATE_H

#include <time.h>
#include <OIS.h>


namespace pong {
    class Core;

	/** State abstraction for game state.
	 *  Represents a particular game state (e.g. menu, single player, 
	 *  multiplayer, etc). **/
    class State {
    public:
        State(void) {}
        virtual ~State(void) {}

		/// Do all the work to set up state things
        virtual void load(Core&) = 0;
		/// Clean up state things from load()
        virtual void unload(Core&) = 0;

        inline virtual bool keyPressed(const OIS::KeyEvent& e) {return true;}
        inline virtual bool keyReleased(const OIS::KeyEvent& e) {return true;}

        inline virtual bool mouseMoved(const OIS::MouseEvent& e) {return true;}
        inline virtual bool mousePressed(const OIS::MouseEvent& e, OIS::MouseButtonID btn) {return true;}
        inline virtual bool mouseReleased(const OIS::MouseEvent& e, OIS::MouseButtonID btn) {return true;}

		inline virtual bool update(Core& c) {return true;}
    };
}
#endif //STATE_H